// 状态管理
let captchaKey = '';
let isSubmitting = false;

// 使用jQuery时
$.ajaxSetup({
    beforeSend: function (xhr, settings) {
        if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type)) {
            xhr.setRequestHeader("X-CSRFToken", Cookies.get('csrftoken'));
        }
    }
});

// 初始化加载验证码
function loadCaptcha() {
    $.ajax({
        url: '/accounts/captcha/',
        method: 'GET',
        beforeSend: showLoading,
        complete: hideLoading,
        success: function (res) {
            if (res.status === 'success') {
                captchaKey = res.data.key;
                $('#captcha-image').attr('src', res.data.image);
                $('input[name="captcha_key"]').val(captchaKey);
            }
        },
        error: handleAjaxError
    });
}

// 点击刷新验证码
$('#captcha-image').click(function (e) {
    e.preventDefault();
    loadCaptcha();
});


// 表单提交处理
$('#login-form').submit(function (e) {
    e.preventDefault();
    if (isSubmitting) return;

    const formData = {
        username: $('input[name="username"]').val().trim(),
        password: $('input[name="password"]').val(),
        captcha: $('input[name="captcha"]').val(),
        captcha_key: captchaKey

    };

    submitForm(formData);
});


// 登录方式切换
function switchLoginType() {
    // 实现短信登录切换逻辑（需结合后端）
}

// // 输入验证码自动提交（提升用户体验）
// $('input[name="captcha"]').on('input', function () {
//     if (this.value.length === 4) {
//         $('#loginForm').trigger('submit');
//     }
// });

/* 工具函数 */
function showLoading() {
    $('.loading').show();
    $('.button-text').text('登录中...');
    isSubmitting = true;
}

function hideLoading() {
    $('.loading').hide();
    $('.button-text').text('登录');
    isSubmitting = false;
}

function showError(errorResponse) {
    // 清空字段异常
    $('.filed-error').empty();
    if (errorResponse) {
        $.each(errorResponse, function (fieldName, errors) {
            let error_class = $('#error-' + fieldName);
            error_class.text(errors[0].message).fadeIn();
            setTimeout(() => error_class.fadeOut(), 5000);
        })
    }

}

function submitForm(data) {
    $.ajax({
        url: '/accounts/login/',
        method: 'POST',
        headers: {
            'X-CSRFToken': csrftoken  // 双重验证机制
        },
        data: data,
        beforeSend: showLoading,
        complete: hideLoading,
        success: function (res) {
            if (res.success) {
                window.location.href = res.redirect;
            } else {
                showError(res.errors);
                loadCaptcha();
            }
        },
        error: handleAjaxError
    });
}

function handleAjaxError(xhr) {
    console.log('来到了handleAjaxError')
    let message = '请求失败，请检查网络连接';
    if (xhr.status === 400) {
        console.log(xhr)
        message = xhr.responseJSON?.msg || '无效请求';
    } else if (xhr.status === 500) {
        message = '服务器错误，请联系管理员';
    }
    showError(message);
    loadCaptcha();
}


// 页面初始化
$(document).ready(function () {
    loadCaptcha();
});